/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/*
 * PanelHorasProduccion.java
 *
 * Created on 07/07/2011, 10:35:00 AM
 */
package sysprojectmg.horasproduccion.gui;

import java.sql.SQLException;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.table.DefaultTableModel;
import sysprojectmg.gui.FrmVentanaPrincipal;
import sysprojectmg.gui.PanelLogo;
import sysprojectmg.horasproduccion.biz.ControladorHorasProduccion;
import sysprojectmg.horasproduccion.be.BeanMiembro;
import sysprojectmg.proyecto.be.BeanProyecto;
import sysprojectmg.proyecto.biz.ControladorProyecto;
import sysprojectmg.proyecto.gui.PanelMiembrosProyecto;
import sysprojectmg.seguridad.biz.ControladorUsuario;
import sysprojectmg.utiles.LE;

/**
 *
 * @author Metis Gaia 2010-02
 */
public class PanelHorasProduccion extends javax.swing.JPanel {

    private int codigoSemana;
    private String cadena;
    private ArrayList<BeanMiembro> listaProd = null;
    private BeanProyecto objProyecto = null;
    private ArrayList<BeanMiembro> listaMiembros = null;
    ControladorHorasProduccion controladorHProd = new ControladorHorasProduccion();
    ControladorProyecto controladorProyecto = new ControladorProyecto();
    ControladorUsuario controladorUsuario = new ControladorUsuario();
    FrmVentanaPrincipal objPr;
    PanelListaProyectos objPanelListaProy;

    /** Creates new form PanelHorasProduccion */
    public PanelHorasProduccion(final FrmVentanaPrincipal objPrincipal, final PanelListaProyectos objPanelListaProy, BeanProyecto objProyecto, int codigoSemana, ArrayList<BeanMiembro> listaMiembros) throws Exception {
        this.codigoSemana = codigoSemana;
        this.objProyecto = objProyecto;
        this.objPr = objPrincipal;
        this.objPanelListaProy = objPanelListaProy;
        this.listaMiembros = listaMiembros;
        this.cadena = objProyecto.getCadenaSemana();
        initComponents();
        this.fillAll();
    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        lblSemana = new javax.swing.JLabel();
        lblCoordinador = new javax.swing.JLabel();
        lblProyecto = new javax.swing.JLabel();
        txtProyecto = new javax.swing.JTextField();
        btnCancelar = new javax.swing.JButton();
        txtCoordinador = new javax.swing.JTextField();
        lblHorasProduccion = new javax.swing.JLabel();
        txtSemana = new javax.swing.JTextField();
        btnGuardar = new javax.swing.JButton();
        jScrollPane1 = new javax.swing.JScrollPane();
        tblHorasProduccion = new javax.swing.JTable();
        btnModificarMiembros = new javax.swing.JButton();
        btnGenerarSemanaSgt = new javax.swing.JButton();

        lblSemana.setText("Semana");

        lblCoordinador.setText("Coordinador");

        lblProyecto.setText("Proyecto");

        btnCancelar.setText("Cancelar");
        btnCancelar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnCancelarActionPerformed(evt);
            }
        });

        lblHorasProduccion.setFont(new java.awt.Font("Tahoma", 0, 14));
        lblHorasProduccion.setText("HORAS DE PRODUCCION");

        btnGuardar.setText("Guardar");
        btnGuardar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnGuardarActionPerformed(evt);
            }
        });

        tblHorasProduccion.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {

            },
            new String [] {
                "MIEMBRO", "HORAS SEMANA ACTUAL"
            }
        ) {
            Class[] types = new Class [] {
                java.lang.Object.class, java.lang.Integer.class
            };
            boolean[] canEdit = new boolean [] {
                false, true
            };

            public Class getColumnClass(int columnIndex) {
                return types [columnIndex];
            }

            public boolean isCellEditable(int rowIndex, int columnIndex) {
                return canEdit [columnIndex];
            }
        });
        tblHorasProduccion.setRowHeight(32);
        jScrollPane1.setViewportView(tblHorasProduccion);
        tblHorasProduccion.getColumnModel().getColumn(1).setResizable(false);

        btnModificarMiembros.setText("Modificar Miembros");
        btnModificarMiembros.setHorizontalTextPosition(javax.swing.SwingConstants.RIGHT);
        btnModificarMiembros.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnModificarMiembrosActionPerformed(evt);
            }
        });

        btnGenerarSemanaSgt.setText("Generar Semana Siguiente");
        btnGenerarSemanaSgt.setEnabled(false);
        btnGenerarSemanaSgt.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnGenerarSemanaSgtActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
        this.setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addGap(165, 165, 165)
                        .addComponent(btnGuardar)
                        .addGap(72, 72, 72)
                        .addComponent(btnCancelar))
                    .addGroup(layout.createSequentialGroup()
                        .addGap(181, 181, 181)
                        .addComponent(lblHorasProduccion))
                    .addGroup(layout.createSequentialGroup()
                        .addGap(44, 44, 44)
                        .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 485, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addGroup(layout.createSequentialGroup()
                        .addGap(100, 100, 100)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addGroup(layout.createSequentialGroup()
                                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                    .addComponent(lblProyecto)
                                    .addComponent(lblCoordinador)
                                    .addComponent(lblSemana))
                                .addGap(20, 20, 20)
                                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                                    .addComponent(txtProyecto, javax.swing.GroupLayout.DEFAULT_SIZE, 241, Short.MAX_VALUE)
                                    .addComponent(txtCoordinador, javax.swing.GroupLayout.Alignment.TRAILING)
                                    .addComponent(txtSemana, javax.swing.GroupLayout.Alignment.TRAILING)))
                            .addGroup(layout.createSequentialGroup()
                                .addComponent(btnGenerarSemanaSgt)
                                .addGap(100, 100, 100)
                                .addComponent(btnModificarMiembros)))))
                .addContainerGap(96, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(lblHorasProduccion, javax.swing.GroupLayout.PREFERRED_SIZE, 22, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(lblProyecto)
                    .addComponent(txtProyecto, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(txtCoordinador, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(lblCoordinador))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(txtSemana, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(lblSemana))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 19, Short.MAX_VALUE)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(btnGenerarSemanaSgt)
                    .addComponent(btnModificarMiembros))
                .addGap(18, 18, 18)
                .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 174, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(btnGuardar)
                    .addComponent(btnCancelar))
                .addContainerGap())
        );
    }// </editor-fold>//GEN-END:initComponents

    private void btnCancelarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnCancelarActionPerformed
        PanelLogo pnlLogo = new PanelLogo();
        objPr.CambiarPanel(pnlLogo);
}//GEN-LAST:event_btnCancelarActionPerformed

    private void btnGuardarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnGuardarActionPerformed
        // TODO add your handling code here:
        // TODO add your handling code here:
        if (listaProd != null) {
            DefaultTableModel datos = (DefaultTableModel) tblHorasProduccion.getModel();

            if (this.actualizarListaProductores(listaProd, datos)) {

                try {
                    if (controladorHProd.actualizarHoras(listaProd, objProyecto.getIdProyecto(), codigoSemana)) {
                        LE.mostrarInformacion("Se actualizo las horas");
                        // enviar la lista actualizada a la ventana principal
                        int indice = objPanelListaProy.getIndiceListaProy();
                        objPanelListaProy.getListaProy().get(indice).setListaProductores(listaProd);
                        PanelListaProyectos panelListaProy = new PanelListaProyectos(objPr, codigoSemana, objPanelListaProy.getListaProy(), listaMiembros);
                        objPr.CambiarPanel(panelListaProy);
                    } else {
                        LE.mostrarError("No se pudo actualizar las horas");
                    }
                } catch (SQLException ex) {
                    Logger.getLogger(PanelHorasProduccion.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
        } else {
            LE.mostrarError("Esta vacia la lista de prouctores");
        }
    }//GEN-LAST:event_btnGuardarActionPerformed

    private void btnModificarMiembrosActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnModificarMiembrosActionPerformed

        if (objProyecto != null) {
            PanelMiembrosProyecto panelMiemPro = null;
            try {
                panelMiemPro = new PanelMiembrosProyecto(objPr, objPanelListaProy, objProyecto, codigoSemana, listaMiembros);
                objPr.CambiarPanel(panelMiemPro);
            } catch (Exception ex) {
                Logger.getLogger(PanelHorasProduccion.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    }//GEN-LAST:event_btnModificarMiembrosActionPerformed

private void btnGenerarSemanaSgtActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnGenerarSemanaSgtActionPerformed
// TODO add your handling code here:
    if (controladorHProd.generarSemanaSgt(codigoSemana)){
        
    }
    
}//GEN-LAST:event_btnGenerarSemanaSgtActionPerformed
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton btnCancelar;
    private javax.swing.JButton btnGenerarSemanaSgt;
    private javax.swing.JButton btnGuardar;
    private javax.swing.JButton btnModificarMiembros;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JLabel lblCoordinador;
    private javax.swing.JLabel lblHorasProduccion;
    private javax.swing.JLabel lblProyecto;
    private javax.swing.JLabel lblSemana;
    private javax.swing.JTable tblHorasProduccion;
    private javax.swing.JTextField txtCoordinador;
    private javax.swing.JTextField txtProyecto;
    private javax.swing.JTextField txtSemana;
    // End of variables declaration//GEN-END:variables

    private void fillAll() throws Exception {

        listaProd = objProyecto.getListaProductores();
        txtProyecto.setText(objProyecto.getNombreProyecto());
        txtCoordinador.setText(objProyecto.getNombreCoordinador());
        txtSemana.setText(String.valueOf(this.codigoSemana));
        txtSemana.setText(cadena);

        txtProyecto.setEditable(false);
        txtCoordinador.setEditable(false);
        txtSemana.setEditable(false);

        DefaultTableModel datos = (DefaultTableModel) tblHorasProduccion.getModel();
        datos.setRowCount(0);
        Object[] rowData;

        for (BeanMiembro x : listaProd) {
            rowData = new Object[]{
                x.getNombreMiembro().toString(),
                x.getHorasSemana()
            };
            datos.addRow(rowData);
        }
//        this.beanHProd = beanHP;
    }

    private boolean actualizarListaProductores(ArrayList<BeanMiembro> listaProd, DefaultTableModel datos) {
        ArrayList<BeanMiembro> listaTemp = new ArrayList<BeanMiembro>();
        boolean huboCambio = false;
        for (int i = 0; i < listaProd.size(); i++) {

            if (datos.getValueAt(i, 0).toString().equalsIgnoreCase(listaProd.get(i).getNombreMiembro())) {
                if ((Integer) datos.getValueAt(i, 1) != listaProd.get(i).getHorasAcumuladas()) {
                    BeanMiembro bean = new BeanMiembro(listaProd.get(i).getIdMiembro(),
                            listaProd.get(i).getNombreMiembro(),
                            (Integer) datos.getValueAt(i, 1));
                    listaTemp.add(bean);
                    huboCambio = true;
                } else {
                    listaTemp.add(listaProd.get(i));
                }

            }
        }
        this.listaProd = listaTemp;
        return huboCambio;
    }
}
